package co.edu.usbcali.egrapico.logica;

/**
 * Clase para la traducci�n de
 * <Code>Restricciones</Code> asociadas a un
 * <Code>Antecedente</Code> desde <I>GraPiCO Textual</I> hacia <I>C�lculo
 * PiCO</I>. <P> Recibe en <I>GraPiCO Textual</I>:<P> <Blockquote><Pre> ClaseRestricciones ListaRestricciones
 * </Pre></Blockquote> <P> donde
 * <Code>ClaseRestricciones</Code> puede ser: <Blockquote><Pre> ? � !
 * </Pre></Blockquote> <P> Traducci�n a <I>C�lculo PiCO</I> seg�n el caso: <Blockquote><Pre>
 *                   Ask  ListaRestricciones
 *                   Tell ListaRestricciones
 * </Pre></Blockquote>
 *
 * @author Johanna Noguera Le�n & Alejandro Berm�dez Mart�nez.
 * @version 1.0
 * @since Enero de 2005
 */
public class Constraints {

    //Variable para almacenar las restricciones asociadas a un antecedente
    //representadas en c�lculo PiCO.
    String constraintsPico = "";
    // Variable para almacenar la lista de restricciones en GraPiCO Textual.
    String constraintsListGraPicoT = "";
    //Objeto de la clase ConstraintsList, para la traducci�n de la lista de restricciones.
    ConstraintsList constraintsList;
    //Variable para almacenar la clasificaci�n de la restricci�n  "ask" o "tell".
    String constraintClasifier = "";
    // Nombre o lista de nombres de los procesos que se est�n traduciendo.
    String nameCurrentProcess = "";

    /**
     * M�todo constructor de clase
     * <Code>Constraints</Code>.<P> Obtiene el primer caracter de la expresi�n
     * como la clasificaci�n de las
     * <Code>Restricciones</Code> y toma el resto como la
     * <Code>Lista
     * de restricciones</Code> en <I>GraPiCO Textual</I>.
     *
     * @param constraintsGraPicoT Expresi�n equivalente a la representaci�n de
     * <Code>Restricciones</Code> en <I>GraPiCO Textual</I>.
     * @param nameProcess Nombre o lista de nombres de procesos.
     */
    public Constraints(String constraintsGraPicoT, String nameProcess) {

        nameCurrentProcess = nameProcess;
        constraintClasifier += constraintsGraPicoT.charAt(0);
        constraintsListGraPicoT = constraintsGraPicoT.substring(1);
    }

    /**
     * Metodo generador de la traducci�n de restricciones asociadas a un
     * antecedente.<P> Se traduce la clasificaci�n de las
     * <Code>Restricciones<Code> unida con la
     * traducci�n de la
     * <Code>Lista de Restricciones</Code> en <I>C�lculo PiCO</I>.
     *
     * @return las
     * <Code>Restricciones</Code> asociadas a un
     * <Code>Antecedente</Code> traducidas al <I>C�lculo PiCO</I>.
     */
    public String traslate() {

        if (constraintClasifier.equals("?")) {
            constraintClasifier = " ask ";
        }
        if (constraintClasifier.equals("!")) {
            constraintClasifier = " tell ";
        }
        constraintsList = new ConstraintsList(constraintsListGraPicoT, nameCurrentProcess);
        constraintsPico = constraintClasifier + constraintsList.traslate();
        return constraintsPico;
    }
}